OpenVPN Access ServerでリモートアクセスVPNをブラウザで簡単設定してみた(Mac OSX編)
こんにちわ。
主題歌といえば、two-mixのJust Communicationが好きなガノタ市田です。
今回は、OpenVPN Access Server(以下、OpenVPN-ASと表記)についてです。
OpenVPN Access Serverとは
概要
一言で言うと、設定用のWebインタフェースがあるOpenVPN のことです。
OpenVPNでリモートアクセスVPNを設定する方法はよくある話ですが、証明書の作成やらユーザ管理やらと、結構めんどくさい作業が多いです。
そこで、ユーザ管理や各種設定をブラウザでできてしまうウェブインタフェースである「OpenVPN Access Server」 を試してみたというのが今回の内容になります。
OpenVPN-ASは様々な機能を持っていますが、今回はリモートアクセスVPNで、プライベートな環境のWebサーバにアクセスしてみたいと思います。
手順
- AWS MarketplaceからOpenVPN-ASのインスタンスを作成
- Elastic IPの設定
- 初期設定
- ユーザ設定
- 管理画面ポート設定の変更
- セキュリティグループ設定
- ルートテーブル設定
- 送信元/送信先の変更チェックを無効にする
- ウェブサーバの設定
- MacからVPN接続
それでは見ていきたいと思います。
OpenVPN-ASのインスタンスの作成
OpenVPN-ASは、Marketplaceでライセンス込みとBYOLの2種類が用意されています。
ライセンス込みのものは、最小で10デバイスのものになります。今回はこの「10デバイスライセンス」のものを使用します。
インスタンスは「t2.micro」で作りました。
試しに使う分には、t2.microで十分軽快に動きました。
OpenVPN-ASのAMI一覧は下記で確認できます。
AWS Marketplace: OpenVPN Technologies, Inc. products for sale on AWS Marketplace._
Elastic IPの設定
OpenVPN-ASのインスタンスが作成できたらElastic IPを設定しておきます。
初期設定
初期設定の実施
初期設定のみコマンドラインで行います。
SSHでアクセスすると、自動的に対話的に設定するプログラムが起動して、質問に答えていくだけで完了します。
設定内容は後から、ブラウザで変更可能です。
SSHログインすると自動的に、下記のようなメッセージが流れます。
ssh -i [EC2の秘密鍵] openvpnas@[EC2のPublic DNS or EIP]
The authenticity of host 'X.X.X.X (X.X.X.X)' can't be established. ECDSA key fingerprint is SHA256:8xvZPE62LT4oz6owjo0cjpZvciC6Gcqtqxxxxxxxxxx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'X.X.X.X' (ECDSA) to the list of known hosts. Welcome to OpenVPN Access Server Appliance 2.1.3 To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. user-data not available: HTTP Error 404: Not Found: util/ec2:12,util/ec2:7,python2.7/urllib2:154,python2.7/urllib2:437,python2.7/urllib2:550,python2.7/urllib2:475,python2.7/urllib2:409,python2.7/urllib2:558 (urllib2.HTTPError) OpenVPN Access Server Initial Configuration Tool ------------------------------------------------------ OpenVPN Access Server End User License Agreement (OpenVPN-AS EULA) 1. Copyright Notice: OpenVPN Access Server License; Copyright (c) 2009-2013 OpenVPN Technologies, Inc.. All rights reserved. "OpenVPN" is a trademark of OpenVPN Technologies, Inc. 2. Redistribution of OpenVPN Access Server binary forms and related documents, are permitted provided that redistributions of OpenVPN Access Server binary forms and related documents reproduce the above copyright notice as well as a complete copy of this EULA. (中略) credits or price adjustments toward any licenses that have already been issued. Furthermore, no discounts will be given for license maintenance renewals unless this is specified in your contract with OpenVPN Technologies, Inc. Please enter 'yes' to indicate your agreement [no]:
最初の質問は、利用規約の同意に関するものなので、yes を入力します。
Please enter 'yes' to indicate your agreement [no]:yes
2つ目の質問は、このOpenVPN-ASがプライマリーノードかどうかを聞いてきます。
OpenVPN-ASは冗長化させて異常時にフェイルオーバーさせることもできるようで、その為の設定になります。
今回は、シングル構成なのでデフォルトのままEnterで構いません。
Will this be the primary Access Server node? (enter 'no' to configure as a backup or standby node) > Press ENTER for default [yes]:Enter
後は基本的にデフォルト設定で構わないと思いますので、全てEnterで答えます。 すると、次のようなログインに関する情報が出力されます。
https://[Elastic IP]:943/admin Login as "openvpn" with the same password used to authenticate to this UNIX host. During normal operation, OpenVPN AS can be accessed via these URLs: Admin UI: https://[Elastic IP]:943/admin Client UI: https://[Elastic IP]:943/
上記の意味は、次の通りです。
- admin権限である「openvpn」 ユーザのパスワードはUNIXホストと同様の方法で設定します。
- admin用のページのURLは「https://[Elastic IP]:943/admin」 です。
- クライアント用のページのURLは「https://[Elastic IP]:943」 です。
Admin権限のパスワード設定
Admin権限の「openvpn」 のパスワードはpasswd
コマンドで設定します。先程ログインしたのと同じようにSSHログインして作業します。
$ sudo passwd openvpn
タイムゾーン設定
タイムゾーン設定はオプション設定です。
デフォルトではUTCになっているので、日本時間に変更しておきます。
これもコマンドラインからの設定になります。
$ sudo dpkg-reconfigure tzdata
実行すると下記のようなダイアログ画面になるので、上下キーでAsiaを選択します。
選択できたら「tabキー」でカーソルを「OK」に合わせてEnterします。
次に「Tokyo」を選択して同じようにOKを押して完了です。
すると下記のようにもとに戻るので、タイムゾーンの変更を確認できます。
Current default time zone: 'Asia/Tokyo' Local time is now: Mon Sep 26 16:34:30 JST 2016. Universal Time is now: Mon Sep 26 07:34:30 UTC 2016. $ date Mon Sep 26 16:34:38 JST 2016
OSアップデート
OpenVPN-ASはUbuntuをベースにしているので、インストールされている各種パッケージを最新状態にしておきます。
$ sudo apt-get update && sudo apt-get upgrade
コマンドラインでの作業は以上になります。 以後の作業はブラウザで管理ページから行います。
Admin用画面へのログイン
いよいよ管理画面にアクセスしてみます。 URLは初期設定の時に出た「https://[Elastic IP]:943/admin」 になります。
URLはHTTPSですが証明書がインストールされていないので下記のような警告が出ます。問題ないので「xxxxxにアクセスする」をクリックします。
下記はchromeの場合の画面です。firefoxなど他のブラウザを利用の場合は、ブラウザ毎に異なる表示になります。
次の画面で先程設定した、openvpnユーザのパスワードを入力してログインします。
初回アクセス時は下記のような利用許諾契約の画面がでるので「Agree」 をクリックしてログインします。
ユーザ設定
ログインできたら「User Management」 メニューの「User Permissions」 をクリックします。
次に「More Settings」の「Show」 をクリックして設定の詳細画面を表示します。
詳細画面でユーザ名とパスワードを設定します。今回は「cm-user1」 というユーザを作成します。
ここまでできたら下部の「Save Settings」 をクリックして保存します。
次の画面で「Update Running Server」 をクリックして、サーバに設定を反映します。
管理画面ポート番号の変更
初期設定で見たようにOpenVPN-ASは、デフォルトで943ポートでAdmin用とClient用の管理画面の両方を提供しています。
また、443ポートでもAdmin用とClient用の管理画面にアクセスすることができます。
その為、セキュリティ上の観点からそれぞれのポートを分けておくことにします。
今回は、943ポートをAdminの管理画面用にして、10443ポートをClientの管理画面用に設定しようと思います。 設定は、管理画面の「Server Network Settings」 から行います。
画面の下側にある「Client Web Server」 の箇所で「Use a different IP address or port」 にチェックを入れます。
そして、「Port number」を「943」から「10443」 に変更して「Save Settings」 をクリックして保存します。
保存できたらサーバに設定を反映させます。
これでポート番号が別れたので、それぞれのポートに対してセキュリティグループの許可IPを変えることができるようになりました。
セキュリティグループ設定
OpenVPN-ASインスタンスのセキュリティグループを下記のように設定します。
今回は「openvpn-as-sg」 という名称で作りました。
許可ポート | 内容 |
---|---|
tcp/22 | 初期設定のためにSSHでアクセスする為に必要です。接続元IPは環境に合わせて設定してください。 |
tcp/943 | Admin用の管理画面用のポートです。接続元IPは環境に合わせて設定してください。 |
tcp/10443 | Client用の管理画面のポートです。リモートアクセスVPNになるのでAnywhereでアクセスを許可しています。 |
udp/1194 | OpenVPN用のポートです。 |
先程、Admin用とClient用で管理画面のポートを変えたので、下記のようにAdmin用の管理画面には特定IPのアクセスのみ許可します。
またSSHも同様のIPからのアクセスのみ許可しています。
Client用の管理画面は、リモートアクセスVPNという性質からAnywhereアクセスを許可しています。
送信元/送信先の変更チェックを無効にする
「送信元/送信先の変更チェック」が有効のままだと、OpenVPN-ASは自分宛てではないパケットを無視するので、プライベート環境のインスタンスにアクセスできません。
その為、これを無効にします。OpenVPN-ASがNATインスタンスとして動く為です。
VPNアクセスするインスタンスのセキュリティグループ設定
プライベート環境にあるウェブサーバのセキュリティグループを下記のように設定します。
今回はデフォルトのNAT設定になっているので、先程作成したOpenVPN-ASのセキュリティグループ「openvpn-as-sg」 からのアクセスを許可しておきます。
MacからVPN接続
これでAWS側の設定は完了しました。次にMacから接続するようにしてみます。
コンフィグのダウンロード
最初にユーザ用のページにアクセスします。ユーザ用のページのURLは「https://[Elastic IP]:943」 です。
確認の画面が出るので「Yes」 をクリックします。
Macでは次の警告が出ますがこれも「Yes」 を選択します。
次のような画面が出たら、クライアント用のアプリかコンフィグをダウンロードします。
今回は既にMacにTunnelblick
をインストール済みでしたので、一番下にあるcm-user1
用のプロフィールファイルをダウンロードします。
ダウンロードしたファイル名は「client.ovpn」 として保存しました
コンフィグをダウンロードしてダブルクリックでインストールします。
コンフィグがインストールできたらtunnelblickでVPN接続してみます。
バーにあるTunnelblickのアイコンを右クリックして、保存したファイル名のclientを選択して接続します。
OpenVPN-ASで設定した「cm-user1」のユーザ名、パスワードを入力します。
接続が完了していたら、下記のような表示になります。
プライベート環境にアクセス
この状態でウェブサーバのプライベートIPにアクセスして下記のようなページが見えたらOKです。 (ウェブサーバの設定は事前に終わっているものとします。)
最後に
OpenVPN Access Serverは最初に少しコマンドライン操作が必要ですが、非常に簡単にリモートアクセスVPNができました。 インスタンスタイプも比較的小さめでよさそうなので、リモートアクセスVPNの選択肢の一つとしていかがでしょうか?
参考:
公式サイトの導入マニュアルは以下です。本エントリの初期設定までの手順が記載されています。
Amazon Web Services EC2 Community Appliance Quick Start Guide_
以上になります。